#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
bool isNum(char a){
    return a>='0'&&a<='9';
}
bool isChar(char a){
    return a>='a'&&a<='z';
}
string reverse(string s){
    string ss="";
    int len=s.size();
    for(int i=len-1;i>=0;i--){
        ss+=s[i];
    }
    return ss;
}
string expand(string str,int k){
    int len=str.size();
    string ss="";
    for(int i=0;i<len;i++){
        string temp="";
        for(int j=0;j<k;j++){
            temp+=str[i];
        }
        ss+=temp;
    }
    return ss;
}
/*
bool checkH(string str){
    int len=str.size();
    string ss="";
    for(int i=len-1;i>=0;i--){
        ss+=str[i];
    }
    if(ss==str) return true;
    else return false;
}
*/

/*
struct Node{
    int start,end,len;
};
struct Rule1{
    bool operator()(const Node &a1,const Node &a2){
        return a1.len<a2.len;
    }
};
char str[505];
Node nodes[250005];
//判断字符串数组中从i到j的子串是否是回文串
bool checkH(char str[],int i,int j){
    while(i<j){
        if(str[i]==str[j]){
                i++;j--;
        }else{
            return false;
        }
    }
    return true;    
}
*/
/*
int compareChar[26];
int numChar[26];
//检查str1是否一个字符唯一对应str2一个字符
bool checkStr1(char str1[],char str2[]){
    memset(compareChar,0,sizeof(compareChar));
    memset(numChar,0,sizeof(numChar));
    //记录下str1中出现的所有字符
    for(int i=0;i<strlen(str1);i++){
        int temp1=str1[i]-'A';
        int temp2=str2[i]-'A';
        numChar[temp1]++;
        if (numChar[temp1]==1){
            compareChar[temp1]=temp2;
        }else{
            //此时存在str1同一个字符对应了str2中不同的密字
            if(compareChar[temp1]!=temp2){
                return false;
            }
        }  
    }
    return true;
}
//判断密文字母在原信息中有没有出现
bool checkStr2(char str1[],char str2[]){
    int compareChar[26];
    memset(compareChar,0,sizeof(compareChar));
    //记录下str1中出现的所有字符
    for(int i=0;i<strlen(str1);i++){
        int temp=str1[i]-'A';
        compareChar[temp]=1;
    }
    //对str2中所有字符进行判断
    for(int i=0;i<strlen(str2);i++){
        int temp=str2[i]-'A';
        //存在一个字符在str2中出现，在str1中没有出现
        if (compareChar[temp]!=1){
            return false;
        }
    }
    return true;
}
*/
int main(){
    //11:潜伏者
    /*
    char str1[105],str2[105],str3[105];
    cin>>str1>>str2>>str3;
    if (!checkStr2(str1,str2)||!checkStr1(str2,str1)||!checkStr1(str1,str2)){
        cout<<"Failed";
        return 0;
    }
    for(int i=0;i<strlen(str3);i++){
        //计算每一个密文字符所对应明文字符
        int temp=str3[i]-'A';
        char tempChar=compareChar[temp]+'A';
        cout<<tempChar;
    }
    */
   //20:删除单词后缀
   /*
   char word[35];
   cin>>word;
   int len=strlen(word);
   if (word[len-1]=='r'&&word[len-2]=='e'){
       word[len-1]='\0';
       word[len-2]='\0';
       cout<<word;
       return 0;
   }
    if (word[len-1]=='y'&&word[len-2]=='l'){
       word[len-1]='\0';
       word[len-2]='\0';
       cout<<word;
       return 0;
   }
   if (word[len-1]=='g'&&word[len-2]=='n'&&word[len-3]=='i'){
       word[len-1]='\0';
       word[len-2]='\0';
       word[len-3]='\0';
       cout<<word;
       return 0;
   }     
   cout<<word;
   */

    //30:字符环
    /*
    char str1[260],str2[260];
    cin>>str1>>str2;
    //index记录str1中正在比较的字符在str2中出现的位置
    queue<int> index;
    int len1=strlen(str1);
    int len2=strlen(str2);
    //初始化设置每个字符为起点的公共字符串长度为0
    int res=0;
    for(int i=0;i<len1;i++){
        for(int j=0;j<len2;j++){
            int k1=i,k2=j,len=0;
            while(str1[k1]==str2[k2]){
                k1=(k1+1)%len1;
                k2=(k2+1)%len2;
                len++;
                if(len>=min(len1,len2)){
                    break;
                }
            }
            res=max(res,len);
        }
    }
    cout<<res;
    */
    //34:回文子串 未通过
    /*
    cin>>str;    
    int count=0;    
    for(int i=0;i<strlen(str);i++){
        for(int j=i+1;j<strlen(str);j++){
            if (checkH(str,i,j)){
                nodes[count].start=i;
                nodes[count].end=j;
                nodes[count].len=j-i+1;
                count++;
            }
        }
    }
    sort(nodes,nodes+count,Rule1());
    for(int i=0;i<count;i++){
        for(int j=nodes[i].start;j<=nodes[i].end;j++){
            cout<<str[j];
        }
        cout<<endl;
    }
    */

   //34:回文子串
   /*
    string str;
    cin>>str;
    // cout<<str;
    int len=str.size();
    for(int l=2;l<=len;l++){
        //每种回文子串的长度，从小到大输出
        for(int j=0;j<len;j++){
            string s="";
            for(int k=0;k<l;k++){
                s+=str[j+k];
            }
            if(checkH(s)){
                cout<<s<<endl;
            }
        }
    }

    */
    //35:字符串的展开
    /*
    int p[5];
    cin>>p[1]>>p[2]>>p[3];
    char str[105];
    cin>>str;
    string res; 
    int len=strlen(str);
    for(int i=0;i<len;i++){
        if(str[i]=='-'&&i>0&&i<len-1){
            //'-'两边都是字母||'-'两边都是数字
            if( ( isNum(str[i-1])&&isNum(str[i+1]) )||( isChar(str[i-1])&&isChar(str[i+1]) ) ){            
                //rule5
                if(str[i-1]>=str[i+1]){
                    cout<<'-';
                }else if(str[i+1]-str[i-1]==1){
                    continue;
                }else{
                    res="";            
                    int len=str[i+1]-str[i-1];
                    //rule2
                    //字符和数字处理不同
                    if(isChar(str[i-1])&&isChar(str[i+1])){
                        for(int k=1;k<len;k++){
                            if(p[1]==1)
                            res+=str[i-1]+k;
                            else if(p[1]==2)
                            res+=str[i-1]+k-32;
                            else if(p[1]==3)
                            res+='*';
                        } 
                    }else if(isNum(str[i-1])&&isNum(str[i+1])) {
                        for(int k=1;k<len;k++){                        
                            if(p[1]==1||p[1]==2)
                            res+=str[i-1]+k;                        
                            else if(p[1]==3)
                            res+='*';                      
                        } 
                    }                 
                    //rule3
                    if(p[2]!=1){
                        res=expand(res,p[2]);
                    }
                    //rule4
                    if(p[3]==2){
                        res=reverse(res);
                    } 
                    cout<<res; 
                }           
            }else{
                cout<<str[i];
            }
        }else{
            cout<<str[i];
        }
    
    }
    */
    return 0;
}